package com.baitengsoft.patentservicemonitor.api.dao;

import com.baitengsoft.patentservicemonitor.api.entity.*;
import com.baitengsoft.patentservicemonitor.api.model.ApplicantInfoModel;
import com.baitengsoft.patentservicemonitor.api.model.PacPatentInfoCountModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by 周俊 on 2018/1/3.
 */
@Mapper
public interface SystemBaseDao {

    /**
     * 创建临时表
     * @param tableName 临时表名
     */
    void createNewTable(@Param("tableName")String tableName);

    /**
     * 删除临时表
     * @param tableName 临时表名
     */
    void dropTable(@Param("tableName")String tableName);

    /**
     * 获取所有状态为（1：启动，2：试用）的平台
     */
    List<WebPlatformEntity> queryWebPlatformList();

    /**
     * 获取某个平台所有状态为（1：正常）的区域
     * @param PlatformID 平台id
     */
    List<WebPlatformAreaEntity> queryWebPlatformAreaList(@Param("PlatformID")Integer PlatformID);

    /**
     * 根据区域ID获取平台ID
     * @param ID 区域id
     */
    Integer queryPlatformIdByAreaId(@Param("ID")Integer ID);

    /**
     * 根据平台ID获取平台类型
     * @param ID 平台id
     */
    Integer queryPlatformTypeByPlatformId(@Param("ID")Integer ID);

    /**
     * 获取区域对应年月的专利指标
     * @param DateYM 年月
     * @param AreaID 区域ID
     */
    List<CfgPatentIndicatorEntity> queryCfgPatentIndicatorList(@Param("DateYM")Integer DateYM,@Param("AreaID")Integer AreaID);

    /**
     * 获取区域对应年月所有状态为（1：正常）的专利
     * @param AreaID 区域ID
     * @param PlatformID 平台id
     * @param ApplyPerson 权利人名称
     * @param ApplyPersonType 权利人类型
     * @param PatAddressLast 权利人地址
     */
    List<PacPatentinfoEntity> queryPacPatentinfoList(@Param("AreaID")Integer AreaID,@Param("PlatformID")Integer PlatformID,@Param("ApplyPerson")String ApplyPerson,@Param("ApplyPersonType")Integer ApplyPersonType,@Param("PatAddressLast")String PatAddressLast);

    /**
     * 更新权利人ID
     * @param PlatformID 平台id
     * @param ID 专利ID
     * @param ApplyID 权利人ID
     */
    void updatePacPatentInfoById(@Param("ID")Integer ID,@Param("PlatformID")Integer PlatformID,@Param("ApplyID") Integer ApplyID);

    /**
     * 获取pac_patentinfo表的汇总数据,针对rpt_patent_data_area表
     * @param AreaID 区域ID
     * @param PlatformID 平台id
     * @param StartDate 申请、授权开始日期
     * @param EndDate 申请、授权结束日期
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoCount
    (@Param("AreaID")Integer AreaID,@Param("PlatformID")Integer PlatformID, @Param("StartDate")String StartDate, @Param("EndDate")String EndDate);

    /**
     * 获取IPC分类（条件为ParentID = 0）中第一大类
     * @param ParentID IPC父ID
     */
    List<CfgIpcEntity> queryCfgIpcList(@Param("ParentID")Integer ParentID);

    /**
     * 获取pac_patentinfo表的汇总数据，针对rpt_patent_ipc表
     * @param PlatformID 平台id
     * @param IPCId IPC的CODE首字母
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoForIpcCount(@Param("PlatformID")Integer PlatformID, @Param("IPCId")String IPCId);

    /**
     * 获取pac_patentinfo表的汇总数据，针对rpt_inventor表
     * @param PlatformID 平台id
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoForInventorCount(@Param("PlatformID")Integer PlatformID);

    /**
     * 获取pac_patentinfo表的汇总数据，针对rpt_applicant表
     * @param PlatformID 平台id
     * @param DataType 数据范围：1当前有效量，2专利总量
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoForAgencyCount(@Param("PlatformID")Integer PlatformID,@Param("DataType")Integer DataType);

    /**
     * 获取pac_patentinfo表的权利人汇总数据，针对rpt_applicant表
     * @param AgencyName 代理机构名称
     * @param PlatformID 平台id
     * @param DataType 数据范围：1当前有效量，2专利总量
     */
    Integer queryPacPatentinfoForAgencyApplyPersonCount(@Param("AgencyName")String AgencyName,@Param("PlatformID")
            Integer PlatformID,@Param("DataType")Integer DataType);

    /**
     * 更新所属平台的落地专利信息的区域ID,区县级
     * @param PlatformID 平台id
     */
    void updatePacPatentInfo(@Param("PlatformID")Integer PlatformID);

    /**
     * 更新所属平台的落地专利信息的区域ID,市级及以上
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoCity(@Param("PlatformID")Integer PlatformID);

    /**
     * 更新所属平台的落地转出专利信息的区域ID,区县级
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoOut(@Param("PlatformID")Integer PlatformID);

    /**
     * 更新所属平台的落地转出专利信息的区域ID,市级及以上
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoOutCity(@Param("PlatformID")Integer PlatformID);

    /**
     * 插入权利人临时表数据
     * @param PlatformID 平台id
     * @param StartDate 申请、授权开始日期
     * @param EndDate 申请、授权结束日期
     */
    void saveTempRptApplicant(@Param("PlatformID")Integer PlatformID,@Param("StartDate")String StartDate, @Param("EndDate")String EndDate);

    /**
     * 删除权利人临时表数据
     * @param PlatformID 平台id
     */
    void deleteTempRptApplicant(@Param("PlatformID")Integer PlatformID);

    /**
     * 获取一个平台的所有权利人
     * @param PlatformID 平台id
     */
    List<ApplicantInfoModel> queryApplicantInfoList(@Param("PlatformID")Integer PlatformID);

    /**
     * 更新转出专利信息表中权利人ID
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoOutApplyId(@Param("PlatformID")Integer PlatformID);

    /**
     * 更新转入专利信息表中权利人ID
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoApplyId(@Param("PlatformID")Integer PlatformID);


    /**
     * 获取权利人临时表中的数据
     * @param ApplyPerson 权利人名称
     * @param ApplyPersonType 权利人类型
     * @param PatAddressLast 权利人地址
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoForApplicantList(@Param("ApplyPerson")String ApplyPerson,@Param("ApplyPersonType")Integer
            ApplyPersonType,@Param("PatAddressLast")String PatAddressLast);
}
